<?php
/**
 * 文件版本控制函数
 * 用于解决浏览器缓存问题
 */

/**
 * 获取文件版本号（基于文件修改时间）
 * @param string $file_path 文件路径
 * @return string 版本号
 */
function getFileVersion($file_path) {
    $full_path = __DIR__ . '/../' . $file_path;
    if (file_exists($full_path)) {
        return filemtime($full_path);
    }
    return time(); // 如果文件不存在，返回当前时间戳
}

/**
 * 生成带版本号的资源URL
 * @param string $file_path 文件路径
 * @return string 带版本号的URL
 */
function getVersionedUrl($file_path) {
    $version = getFileVersion($file_path);
    return $file_path . '?v=' . $version;
}

/**
 * 生成CSS链接标签
 * @param string $css_path CSS文件路径
 * @return string HTML链接标签
 */
function getCssLink($css_path) {
    $versioned_url = getVersionedUrl($css_path);
    return '<link rel="stylesheet" href="' . htmlspecialchars($versioned_url) . '">';
}

/**
 * 生成JS脚本标签
 * @param string $js_path JS文件路径
 * @return string HTML脚本标签
 */
function getJsScript($js_path) {
    $versioned_url = getVersionedUrl($js_path);
    return '<script src="' . htmlspecialchars($versioned_url) . '"></script>';
}

/**
 * 生成图片标签
 * @param string $img_path 图片路径
 * @param string $alt 替代文本
 * @param string $attributes 其他属性
 * @return string HTML图片标签
 */
function getVersionedImg($img_path, $alt = '', $attributes = '') {
    $versioned_url = getVersionedUrl($img_path);
    return '<img src="' . htmlspecialchars($versioned_url) . '" alt="' . htmlspecialchars($alt) . '" ' . $attributes . '>';
}

/**
 * 添加防缓存头部
 */
function addNoCacheHeaders() {
    header('Cache-Control: no-cache, no-store, must-revalidate');
    header('Pragma: no-cache');
    header('Expires: 0');
}

/**
 * 为静态资源添加缓存控制头
 * @param string $file_extension 文件扩展名
 */
function addStaticCacheHeaders($file_extension) {
    switch ($file_extension) {
        case 'css':
        case 'js':
            header('Cache-Control: public, max-age=3600, must-revalidate');
            break;
        case 'png':
        case 'jpg':
        case 'jpeg':
        case 'gif':
        case 'ico':
        case 'svg':
            header('Cache-Control: public, max-age=86400');
            break;
        default:
            header('Cache-Control: no-cache, no-store, must-revalidate');
    }
}
?>
